Public Class Frm_ReporteVacaciones
    Public dtt_Data As DataTable
    Public gi_periodo_menor, gi_periodo_mayor As Integer

    Private Sub crv_ReporteVacaciones_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles crv_ReporteVacaciones.Load
        Dim lo_dt As New System.Data.DataTable
        Dim i, li_cont_periodo, ii As Integer
        Dim myReport As New crp_ReporteVacaciones
        Dim str_Vendors, ls_vendor, ls_sorteoporapellido, ls_periodo, ls_anio, ls_anioant, ls_vendorant, ls_periodoant, ls_periodo_menor, ls_estadovendor, ls_prueba_a, ls_prueba_b As String
        Dim ld_saldo_vacaciones, ld_dias_usados, ld_dias, ld_dias_ganados, ld_dias_mes01, ld_dias_mes02, ld_total_dias As Double
        Dim ldt_primerdiames, ldt_ultimodiames, ldt_vac_fechainicio, ldt_vac_fechatermino, ldt_fechaingreso, ldt_fechatermino As Date
        Dim Ds, ds_vacaciones_empleado, ds_total_dias As New DataSet
        Dim lo_row As DataRow
        Dim primarykey(2) As DataColumn
        Dim valor1, valor2, valor3, valor4, valor5 As New CrystalDecisions.Shared.ParameterDiscreteValue
        Dim lb_insertar, lb_diasvendidos As Boolean

        valor1.Value = gi_periodo_menor - 1
        valor2.Value = gi_periodo_menor
        valor3.Value = gi_periodo_menor + 1
        valor4.Value = gi_periodo_menor + 2
        valor5.Value = gi_periodo_menor + 3

        'Definir DataTable que vamos a retornar
        lo_dt.Columns.Add("vendor")
        lo_dt.Columns.Add("fechaingreso", GetType(Date))
        lo_dt.Columns.Add("sorteoporapellido")
        lo_dt.Columns.Add("fechatermino", GetType(Date))
        lo_dt.Columns.Add("vac_fechainicio", GetType(Date))
        lo_dt.Columns.Add("vac_fechatermino", GetType(Date))
        lo_dt.Columns.Add("periodo")
        lo_dt.Columns.Add("cantidad_01", GetType(Double))
        lo_dt.Columns.Add("cantidad_02", GetType(Double))
        lo_dt.Columns.Add("cantidad_03", GetType(Double))
        lo_dt.Columns.Add("cantidad_04", GetType(Double))
        lo_dt.Columns.Add("cantidad_05", GetType(Double))
        lo_dt.Columns.Add("total", GetType(Double))
        lo_dt.Columns.Add("usado", GetType(Double))
        lo_dt.Columns.Add("vendido", GetType(Double))
        lo_dt.Columns.Add("nogozado", GetType(Double))
        lo_dt.Columns.Add("truncas", GetType(Double))
        lo_dt.Columns.Add("estadovendor")

        'primarykey(0) = lo_dt.Columns("vendor")
        'primarykey(1) = lo_dt.Columns("vac_fechainicio")
        'primarykey(2) = lo_dt.Columns("periodo")
        'lo_dt.PrimaryKey = primarykey

        'Este primer bucle corresponde a los empleados seleccionados
        For ii = 0 To dtt_Data.Rows.Count - 1
            str_Vendors = "" & dtt_Data.Rows(ii)("VENDOR").ToString & ""
            ls_periodo_menor = "" & CStr(gi_periodo_menor) & ""

            'En esta consulta se obtiene las vacaciones usadas del empleado
            Ds = Datos_Vacaciones(str_Vendors, ls_periodo_menor)

            li_cont_periodo = 0
            ls_anio = Nothing

            If dtt_Data.Rows(ii)("VENDOR").ToString = "0312517" Then
                str_Vendors = str_Vendors
            End If

            If Ds.Tables(0).Rows.Count > 0 Then
                For i = 0 To Ds.Tables(0).Rows.Count - 1
                    ls_vendor = Ds.Tables(0).Rows(i).Item(0).ToString()
                    ldt_fechaingreso = Ds.Tables(0).Rows(i).Item(1).ToString
                    ls_sorteoporapellido = Ds.Tables(0).Rows(i).Item(2).ToString

                    If Ds.Tables(0).Rows(i).Item(3).ToString.Length <> 0 Then
                        ldt_fechatermino = Ds.Tables(0).Rows(i).Item(3).ToString
                    Else
                        ldt_fechatermino = Nothing
                    End If

                    ldt_vac_fechainicio = Ds.Tables(0).Rows(i).Item(4).ToString
                    ldt_vac_fechatermino = Ds.Tables(0).Rows(i).Item(5).ToString
                    ldt_primerdiames = DateSerial(Year(ldt_vac_fechatermino), Month(ldt_vac_fechatermino) + 0, 1)
                    ldt_ultimodiames = DateSerial(Year(Ds.Tables(0).Rows(i).Item(4).ToString()), Month(Ds.Tables(0).Rows(i).Item(4).ToString()) + 1, 0)
                    ld_dias_usados = Math.Round(CType(Ds.Tables(0).Rows(i).Item(7).ToString, Double), 2)
                    lb_diasvendidos = False

                    If ld_dias_usados = 0 Then
                        ld_dias_usados = Math.Round(CType(Ds.Tables(0).Rows(i).Item(8).ToString, Double), 2)
                        lb_diasvendidos = True
                    End If

                    ls_estadovendor = Ds.Tables(0).Rows(i).Item(10).ToString
                    ls_periodo = Ds.Tables(0).Rows(i).Item(6).ToString
                    If ls_anio = Nothing Then ls_anio = ls_periodo - 1

                    If ls_vendorant <> Nothing Then
                        If Ds.Tables(0).Rows(i).Item(0).ToString() <> ls_vendorant Then
                            ld_saldo_vacaciones = 0
                            ld_dias_ganados = 0
                            ls_anioant = Nothing
                            ls_periodoant = Nothing
                        End If
                    End If

                    'If ls_periodo <> ls_periodoant Then
                    '    ds_total_dias = Vacaciones_Total_Dias(ls_vendor, ls_periodo)
                    '    If ds_total_dias.Tables(0).Rows.Count > 0 Then ld_total_dias = Math.Round(CType(ds_total_dias.Tables(0).Rows(0).Item(1).ToString, Double), 2)
                    'End If

                    If ldt_vac_fechatermino > ldt_ultimodiames Then
                        ld_dias_mes01 = Math.Round(CType(DateDiff(DateInterval.Day, ldt_vac_fechainicio, ldt_ultimodiames), Double) + 1, 2)
                        ld_dias_mes02 = Math.Round(ld_dias_usados - ld_dias_mes01, 2)

                        If ld_dias_mes01 > ld_dias_usados Then
                            ld_dias_mes01 = Math.Round(ld_dias_mes01 - ld_dias_usados, 2)
                            ld_dias_mes02 = Math.Round(ld_dias_usados - ld_dias_mes01, 2)
                        End If

                        'En esta consulta se obtiene las vacaciones ganadas del empleado
                        If ld_dias_ganados = 0 Then
                            ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo, ls_anio, ls_estadovendor)
                            ld_dias_ganados = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(0).Item(2).ToString(), Double), 2)
                            ls_anio = ds_vacaciones_empleado.Tables(0).Rows(0).Item(3).ToString
                            If ls_anio <> ls_anioant Then li_cont_periodo = li_cont_periodo + 1
                        End If

                        If ld_dias_ganados > ld_dias_mes01 Then
                            lo_row = lo_dt.NewRow
                            lo_row(0) = ls_vendor
                            lo_row(1) = ldt_fechaingreso
                            lo_row(2) = ls_sorteoporapellido
                            lo_row(3) = CType(ldt_fechatermino, Date)
                            lo_row(4) = ldt_vac_fechainicio
                            lo_row(5) = ldt_ultimodiames
                            lo_row(6) = ls_periodo
                            lo_row(7) = 0.0
                            lo_row(8) = 0.0
                            lo_row(9) = 0.0
                            lo_row(10) = 0.0
                            lo_row(11) = 0.0
                            lo_row(14) = Math.Round(CType(Ds.Tables(0).Rows(i).Item(8).ToString, Double), 2)
                            lo_row(15) = 0.0
                            lo_row(16) = 0.0
                            lo_row(17) = ls_estadovendor
                            lo_row(6 + li_cont_periodo) = ld_dias_mes01

                            ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_mes01, 2)
                            ld_dias_usados = Math.Round(ld_dias_usados - ld_dias_mes01, 2)
                            ld_dias_mes01 = Math.Round(ld_dias_mes01 - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)

                            lo_dt.Rows.Add(lo_row)
                        Else
                            lo_row = lo_dt.NewRow
                            lo_row(0) = ls_vendor
                            lo_row(1) = ldt_fechaingreso
                            lo_row(2) = ls_sorteoporapellido
                            lo_row(3) = CType(ldt_fechatermino, Date)
                            lo_row(4) = ldt_vac_fechainicio
                            lo_row(5) = ldt_ultimodiames
                            lo_row(6) = ls_periodo
                            lo_row(7) = 0.0
                            lo_row(8) = 0.0
                            lo_row(9) = 0.0
                            lo_row(10) = 0.0
                            lo_row(11) = 0.0
                            lo_row(14) = Math.Round(CType(Ds.Tables(0).Rows(i).Item(8).ToString, Double), 2)
                            lo_row(15) = 0.0
                            lo_row(16) = 0.0
                            lo_row(17) = ls_estadovendor
                            lo_row(6 + li_cont_periodo) = ld_dias_ganados

                            ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_mes01, 2)
                            ld_dias_mes01 = Math.Round(ld_dias_mes01 - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                            ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)

                            If ld_dias_mes01 > 0 Then
                                If ld_dias_ganados <= 0 Then
                                    ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo, ls_anio, ls_estadovendor)
                                    ld_dias_ganados = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(1).Item(2).ToString(), Double), 2)
                                    ls_anio = ds_vacaciones_empleado.Tables(0).Rows(1).Item(3).ToString
                                    If ls_anio <> ls_anioant Then li_cont_periodo = li_cont_periodo + 1
                                End If

                                If ld_dias_ganados >= ld_dias_mes01 Then
                                    lo_row(6 + li_cont_periodo) = ld_dias_mes01
                                    ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_mes01, 2)
                                    ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                                    ld_dias_mes01 = Math.Round(ld_dias_mes01 - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                                End If
                            End If

                            lo_dt.Rows.Add(lo_row)
                        End If


                        If ld_dias_ganados = 0 Then
                            ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo, ls_anio, ls_estadovendor)
                            ld_dias_ganados = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(1).Item(2).ToString(), Double), 2)
                            ls_anio = ds_vacaciones_empleado.Tables(0).Rows(1).Item(3).ToString
                            If ls_anio <> ls_anioant Then li_cont_periodo = li_cont_periodo + 1
                        End If

                        If ld_dias_ganados > ld_dias_mes02 Then
                            lo_row = lo_dt.NewRow
                            lo_row(0) = ls_vendor
                            lo_row(1) = ldt_fechaingreso
                            lo_row(2) = ls_sorteoporapellido
                            lo_row(3) = CType(ldt_fechatermino, Date)
                            lo_row(4) = ldt_primerdiames
                            lo_row(5) = ldt_vac_fechatermino
                            lo_row(6) = ls_periodo
                            lo_row(7) = 0.0
                            lo_row(8) = 0.0
                            lo_row(9) = 0.0
                            lo_row(10) = 0.0
                            lo_row(11) = 0.0
                            lo_row(14) = Math.Round(CType(Ds.Tables(0).Rows(i).Item(8).ToString, Double), 2)
                            lo_row(15) = 0.0
                            lo_row(16) = 0.0
                            lo_row(17) = ls_estadovendor
                            lo_row(6 + li_cont_periodo) = ld_dias_mes02

                            ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_mes02, 2)
                            ld_dias_mes02 = Math.Round(ld_dias_mes02 - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                            ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)

                            lo_dt.Rows.Add(lo_row)
                        Else
                            lo_row = lo_dt.NewRow
                            lo_row(0) = ls_vendor
                            lo_row(1) = ldt_fechaingreso
                            lo_row(2) = ls_sorteoporapellido
                            lo_row(3) = CType(ldt_fechatermino, Date)
                            lo_row(4) = ldt_primerdiames
                            lo_row(5) = ldt_vac_fechatermino
                            lo_row(6) = ls_periodo
                            lo_row(7) = 0.0
                            lo_row(8) = 0.0
                            lo_row(9) = 0.0
                            lo_row(10) = 0.0
                            lo_row(11) = 0.0
                            lo_row(14) = Math.Round(CType(Ds.Tables(0).Rows(i).Item(8).ToString, Double), 2)
                            lo_row(15) = 0.0
                            lo_row(16) = 0.0
                            lo_row(17) = ls_estadovendor
                            lo_row(6 + li_cont_periodo) = ld_dias_ganados

                            ld_dias_mes02 = Math.Round(ld_dias_mes02 - ld_dias_ganados, 2)
                            ld_dias_ganados = Math.Round(ld_dias_ganados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                            ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)

                            If ld_dias_mes02 > 0 Then
                                If ld_dias_ganados <= 0 Then
                                    ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo, ls_anio, ls_estadovendor)
                                    ld_dias_ganados = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(1).Item(2).ToString(), Double), 2)
                                    ls_anio = ds_vacaciones_empleado.Tables(0).Rows(1).Item(3).ToString
                                    If ls_anio <> ls_anioant Then li_cont_periodo = li_cont_periodo + 1
                                End If

                                If ld_dias_ganados >= ld_dias_mes02 Then
                                    lo_row(6 + li_cont_periodo) = ld_dias_mes02
                                    ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_mes02, 2)
                                    ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                                    ld_dias_mes02 = Math.Round(ld_dias_mes02 - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                                End If
                            End If

                            lo_dt.Rows.Add(lo_row)
                        End If
                    Else
                        If ld_dias_ganados = 0 Then
                            ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo, ls_anio, ls_estadovendor)
                            ld_dias_ganados = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(0).Item(2).ToString(), Double), 2)
                            ls_anio = ds_vacaciones_empleado.Tables(0).Rows(0).Item(3).ToString
                            If ls_anio <> ls_anioant Then li_cont_periodo = li_cont_periodo + 1
                        End If

                        If ld_dias_ganados >= ld_dias_usados Then
                            lo_row = lo_dt.NewRow
                            lo_row(0) = ls_vendor
                            lo_row(1) = ldt_fechaingreso
                            lo_row(2) = ls_sorteoporapellido
                            lo_row(3) = CType(ldt_fechatermino, Date)
                            lo_row(4) = ldt_vac_fechainicio
                            lo_row(5) = ldt_vac_fechatermino
                            lo_row(6) = ls_periodo
                            lo_row(7) = 0.0
                            lo_row(8) = 0.0
                            lo_row(9) = 0.0
                            lo_row(10) = 0.0
                            lo_row(11) = 0.0
                            lo_row(14) = Math.Round(CType(Ds.Tables(0).Rows(i).Item(8).ToString, Double), 2)
                            lo_row(15) = 0.0
                            lo_row(16) = 0.0
                            lo_row(17) = ls_estadovendor
                            lo_row(6 + li_cont_periodo) = ld_dias_usados

                            ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_usados, 2)
                            ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)

                            If ld_dias_ganados <= 0 Then
                                If ls_anio <> ls_anioant Then li_cont_periodo = li_cont_periodo + 1
                            End If

                            lo_dt.Rows.Add(lo_row)
                        Else
                            lo_row = lo_dt.NewRow
                            lo_row(0) = ls_vendor
                            lo_row(1) = ldt_fechaingreso
                            lo_row(2) = ls_sorteoporapellido
                            lo_row(3) = CType(ldt_fechatermino, Date)
                            lo_row(4) = ldt_vac_fechainicio
                            lo_row(5) = ldt_vac_fechatermino
                            lo_row(6) = ls_periodo
                            lo_row(7) = 0.0
                            lo_row(8) = 0.0
                            lo_row(9) = 0.0
                            lo_row(10) = 0.0
                            lo_row(11) = 0.0
                            lo_row(14) = Math.Round(CType(Ds.Tables(0).Rows(i).Item(8).ToString, Double), 2)
                            lo_row(15) = 0.0
                            lo_row(16) = 0.0
                            lo_row(17) = ls_estadovendor
                            lo_row(6 + li_cont_periodo) = ld_dias_ganados

                            ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_usados, 2)
                            ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                            'ld_total_dias = Math.Round(ld_total_dias - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)

                            If ld_dias_usados > 0 Then
                                If ld_dias_ganados <= 0 Then
                                    ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo, ls_anio, ls_estadovendor)
                                    ld_dias_ganados = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(1).Item(2).ToString(), Double), 2)
                                    ls_anio = ds_vacaciones_empleado.Tables(0).Rows(1).Item(3).ToString
                                    If ls_anio <> ls_anioant Then li_cont_periodo = li_cont_periodo + 1
                                End If

                                If ld_dias_ganados >= ld_dias_usados Then
                                    lo_row(6 + li_cont_periodo) = ld_dias_usados
                                    ld_dias_ganados = Math.Round(ld_dias_ganados - ld_dias_usados, 2)
                                    ld_dias_usados = Math.Round(ld_dias_usados - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                                    'ld_total_dias = Math.Round(ld_total_dias - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                                End If
                            End If
                            lo_dt.Rows.Add(lo_row)
                        End If
                    End If
                    ls_periodoant = ls_periodo
                    ls_vendorant = Ds.Tables(0).Rows(i).Item(0).ToString()
                    ls_anioant = ls_anio
                    'ds_total_dias.Clear()
                Next

                If ls_estadovendor = "I" Then
                    ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo, ls_anio, ls_estadovendor)

                    For i = 0 To ds_vacaciones_empleado.Tables(0).Rows.Count - 1
                        ls_periodo = ds_vacaciones_empleado.Tables(0).Rows(i).Item(1).ToString
                        ls_anio = ds_vacaciones_empleado.Tables(0).Rows(i).Item(3).ToString

                        If ls_periodo = ls_periodoant And ls_anio = ls_anioant And ld_dias_usados = 0 And ld_dias_ganados = 0 Then Continue For

                        If ld_dias_usados = 0 Then
                            If ls_periodo <> ls_periodoant Or ld_dias_ganados > 0 Then
                                lo_row = lo_dt.NewRow
                                lo_row(0) = ls_vendor
                                lo_row(1) = ldt_fechaingreso
                                lo_row(2) = ls_sorteoporapellido
                                lo_row(3) = CType(ldt_fechatermino, Date)
                                lo_row(4) = DBNull.Value
                                lo_row(5) = DBNull.Value
                                lo_row(6) = ls_periodo
                                lo_row(7) = 0.0
                                lo_row(8) = 0.0
                                lo_row(9) = 0.0
                                lo_row(10) = 0.0
                                lo_row(11) = 0.0
                                lo_row(12) = 0.0
                                lo_row(13) = 0.0
                                lo_row(14) = 0.0
                                lo_row(15) = 0.0
                                lo_row(16) = 0.0
                                ld_dias = 0.0
                                lo_dt.Rows.Add(lo_row)

                                If ls_anio <> ls_anioant Then
                                    li_cont_periodo = li_cont_periodo + 1
                                End If

                                'If ld_total_dias = 0 Then
                                '    ds_total_dias = Vacaciones_Total_Dias(ls_vendor, ls_periodo)
                                '    If ds_total_dias.Tables(0).Rows.Count > 0 Then ld_total_dias = Math.Round(CType(ds_total_dias.Tables(0).Rows(0).Item(1).ToString, Double), 2)
                                'End If

                                lb_insertar = True
                            End If

                            If lb_insertar = False Then
                                If ls_periodo = ls_periodoant And ls_anio <> ls_anioant Then
                                    lo_row = lo_dt.NewRow
                                    lo_row(0) = ls_vendor
                                    lo_row(1) = ldt_fechaingreso
                                    lo_row(2) = ls_sorteoporapellido
                                    lo_row(3) = CType(ldt_fechatermino, Date)
                                    lo_row(4) = DBNull.Value
                                    lo_row(5) = DBNull.Value
                                    lo_row(6) = ls_periodo
                                    lo_row(7) = 0.0
                                    lo_row(8) = 0.0
                                    lo_row(9) = 0.0
                                    lo_row(10) = 0.0
                                    lo_row(11) = 0.0
                                    lo_row(12) = 0.0
                                    lo_row(13) = 0.0
                                    lo_row(14) = 0.0
                                    lo_row(15) = 0.0
                                    lo_row(16) = 0.0
                                    ld_dias = 0.0
                                    lo_dt.Rows.Add(lo_row)

                                    If ls_anio <> ls_anioant Then
                                        li_cont_periodo = li_cont_periodo + 1
                                    End If
                                End If
                            End If

                            If ls_periodo = ls_periodoant And ls_anio <> ls_anioant Then
                                li_cont_periodo = li_cont_periodo + 1
                            End If
                        End If

                        If ls_periodo = ls_periodoant And ls_anio <> ls_anioant Then
                            If ld_dias_ganados > 0 Then
                                lo_row(6 + li_cont_periodo) = ld_dias_ganados
                                ld_dias_ganados = ld_dias_ganados - CType(lo_row(6 + li_cont_periodo).ToString, Double)
                                'ld_total_dias = Math.Round(ld_total_dias - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                            Else
                                lo_row(6 + li_cont_periodo) = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(i).Item(2).ToString(), Double), 2)
                                'ld_total_dias = Math.Round(ld_total_dias - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                                'If ld_total_dias > 0 Then ld_total_dias = Math.Round(ld_total_dias - CType(lo_row(6 + li_cont_periodo).ToString, Double), 2)
                            End If

                            ld_dias = ld_dias + CType(lo_row(6 + li_cont_periodo).ToString, Double)

                            If ls_estadovendor = "I" Then
                                ls_prueba_a = ls_periodo & ldt_fechaingreso.ToString("MM")
                                ls_prueba_b = ldt_fechatermino.ToString("yyyy") & ldt_fechatermino.ToString("MM")
                                If ls_prueba_a > ls_prueba_b Then
                                    lo_row(16) = ld_dias
                                Else
                                    lo_row(15) = ld_dias
                                End If
                            End If

                            lo_row(17) = ls_estadovendor

                            ls_periodoant = ls_periodo
                            ls_anioant = ls_anio
                            Continue For
                        End If

                        lo_row(0) = ls_vendor
                        lo_row(1) = ldt_fechaingreso
                        lo_row(2) = ls_sorteoporapellido
                        lo_row(3) = CType(ldt_fechatermino, Date)
                        lo_row(4) = DBNull.Value
                        lo_row(5) = DBNull.Value
                        lo_row(6) = ls_periodo
                        lo_row(7) = 0.0
                        lo_row(8) = 0.0
                        lo_row(9) = 0.0
                        lo_row(10) = 0.0
                        lo_row(11) = 0.0

                        If ld_dias_ganados > 0 Then
                            lo_row(6 + li_cont_periodo) = ld_dias_ganados
                            ld_dias_ganados = ld_dias_ganados - CType(lo_row(6 + li_cont_periodo).ToString, Double)
                        Else
                            lo_row(6 + li_cont_periodo) = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(i).Item(2).ToString(), Double), 2)
                        End If

                        ld_dias = ld_dias + CType(lo_row(6 + li_cont_periodo).ToString, Double)

                        lo_row(14) = 0.0
                        lo_row(15) = 0.0
                        lo_row(16) = 0.0

                        If ls_estadovendor = "I" Then
                            ls_prueba_a = ls_periodo & ldt_fechaingreso.ToString("MM")
                            ls_prueba_b = ldt_fechatermino.ToString("yyyy") & ldt_fechatermino.ToString("MM")
                            If ls_prueba_a > ls_prueba_b Then
                                lo_row(16) = ld_dias
                            Else
                                lo_row(15) = ld_dias
                            End If
                        End If

                        lo_row(17) = ls_estadovendor

                        ls_periodoant = ls_periodo
                        ls_anioant = ls_anio
                    Next
                End If
            Else
                'En el periodo seleccionado no se programaron sus vacaciones
                ls_vendor = dtt_Data.Rows(ii)("VENDOR").ToString()
                ls_sorteoporapellido = dtt_Data.Rows(ii)("SORTEOPORAPELLIDO").ToString()
                ldt_fechaingreso = dtt_Data.Rows(ii)("FECHAINGRESO").ToString()

                If dtt_Data.Rows(ii)("FECHATERMINO").ToString().Length <> 0 Then
                    ldt_fechatermino = CType(dtt_Data.Rows(ii)("FECHATERMINO").ToString(), Date)
                Else
                    ldt_fechatermino = Nothing
                End If

                ls_anio = ls_periodo_menor - 1
                li_cont_periodo = 1
                ld_dias = 0.0
                ls_periodoant = Nothing
                ls_anioant = Nothing

                If ldt_fechatermino > ldt_fechaingreso Then
                    ds_vacaciones_empleado = Vacaciones_Calculados_Empleado(str_Vendors, ls_periodo_menor, ls_anio, "I")
                    ls_estadovendor = "I"

                    For i = 0 To ds_vacaciones_empleado.Tables(0).Rows.Count - 1
                        ls_periodo = ds_vacaciones_empleado.Tables(0).Rows(i).Item(1).ToString
                        ls_anio = ds_vacaciones_empleado.Tables(0).Rows(i).Item(3).ToString

                        If ls_periodo <> ls_periodoant Then
                            lo_row = lo_dt.NewRow
                            ld_dias = 0.0
                        End If

                        If ls_periodo = ls_periodoant And ls_anio <> ls_anioant Then
                            li_cont_periodo = li_cont_periodo + 1
                            lo_row(6 + li_cont_periodo) = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(i).Item(2).ToString(), Double), 2)
                            ld_dias = ld_dias + Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(i).Item(2).ToString(), Double), 2)

                            If ls_estadovendor = "I" Then
                                ls_prueba_a = ls_periodo & ldt_fechaingreso.ToString("MM")
                                ls_prueba_b = ldt_fechatermino.ToString("yyyy") & ldt_fechatermino.ToString("MM")
                                If ls_prueba_a > ls_prueba_b Then
                                    lo_row(16) = ld_dias
                                Else
                                    lo_row(15) = ld_dias
                                End If
                            End If

                            ls_periodoant = ls_periodo
                            ls_anioant = ls_anio
                            Continue For
                        End If

                        lo_row(0) = ls_vendor
                        lo_row(1) = ldt_fechaingreso
                        lo_row(2) = ls_sorteoporapellido
                        lo_row(3) = CType(ldt_fechatermino, Date)
                        lo_row(4) = DBNull.Value
                        lo_row(5) = DBNull.Value
                        lo_row(6) = ls_periodo
                        lo_row(7) = 0.0
                        lo_row(8) = 0.0
                        lo_row(9) = 0.0
                        lo_row(10) = 0.0
                        lo_row(11) = 0.0
                        lo_row(12) = 0.0
                        lo_row(13) = 0.0
                        lo_row(14) = 0.0
                        lo_row(15) = 0.0
                        lo_row(16) = 0.0

                        lo_row(6 + li_cont_periodo) = Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(i).Item(2).ToString(), Double), 2)
                        ld_dias = ld_dias + Math.Round(CType(ds_vacaciones_empleado.Tables(0).Rows(i).Item(2).ToString(), Double), 2)

                        If ls_estadovendor = "I" Then
                            ls_prueba_a = ls_periodo & ldt_fechaingreso.ToString("MM")
                            ls_prueba_b = ldt_fechatermino.ToString("yyyy") & ldt_fechatermino.ToString("MM")
                            If ls_prueba_a > ls_prueba_b Then
                                lo_row(16) = ld_dias
                            Else
                                lo_row(15) = ld_dias
                            End If
                        End If

                        lo_row(17) = ls_estadovendor

                        If ls_periodo <> ls_periodoant Then
                            lo_dt.Rows.Add(lo_row)
                        End If

                        ls_periodoant = ls_periodo
                        ls_anioant = ls_anio
                    Next
                End If
                
            End If
            Ds.Clear()
            ds_vacaciones_empleado.Clear()
        Next

        dtt_Data.Clear()
        dtt_Data.Dispose()

        'ds_total_dias.Clear()
        'ds_total_dias.Dispose()

        myReport.SetDataSource(lo_dt)
        lo_dt.Clear()
        lo_dt.Dispose()
        Ds.Dispose()

        Dim Parametro As New CrystalDecisions.Shared.ParameterValues

        Parametro.Add(valor1)
        myReport.DataDefinition.ParameterFields("cantidad_01").ApplyCurrentValues(Parametro)

        Parametro.Add(valor2)
        myReport.DataDefinition.ParameterFields("cantidad_02").ApplyCurrentValues(Parametro)

        Parametro.Add(valor3)
        myReport.DataDefinition.ParameterFields("cantidad_03").ApplyCurrentValues(Parametro)

        Parametro.Add(valor4)
        myReport.DataDefinition.ParameterFields("cantidad_04").ApplyCurrentValues(Parametro)

        Parametro.Add(valor5)
        myReport.DataDefinition.ParameterFields("cantidad_05").ApplyCurrentValues(Parametro)

        Me.crv_ReporteVacaciones.ReportSource = myReport
    End Sub
End Class